package org.useCode.thread;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * submit和 execute区别示例
 */
public class ThreadPool01 {

    /**
     * 1，向线程池提交任务的两种方式。
     * submit会有返回值。
     */
    public static void main1(String[] args) throws ExecutionException, InterruptedException {
        // 1,创建一个线程池。最大线程池无限，同步转交队列（队列长度为1）
        ExecutorService executorService = Executors.newCachedThreadPool();
        // 2,submit的返回值是个Future，future能拿到线程池执行完任务的结果。
        Future<Integer> future = executorService.submit(() -> {
            return 10;
        });
        // 3，get方法是获取到任务的结果。get方法是个阻塞方法，只有获取到返回值，才会往下执行。
        Integer integer = future.get();
        System.out.println(integer);
    }

    /**
     * 1, execute不会有返回值。
     */
    public static void main(String[] args) {
        // 1, 创建线程池
        ExecutorService executorService = Executors.newCachedThreadPool();
        /**
         * 2， 使用execute去执行方法体。 他不会有返回值。
         */
        executorService.execute(()->{
            Integer i = 10;
            System.out.println("i的值是"+i);
        });
    }


}
